﻿<?php
	echo "第一步：源程序的输入和扫描<br />";
	$s = file_get_contents('code.code');//读取文件
	$s = preg_replace('/{.*?}/is','',$s);//去除注释
	$s = preg_replace("/\s/is",'',$s);//去除换行
	$s = str_replace(';','#;#',$s);
	$s = str_replace(',','#,#',$s);
	$s = str_replace(':=','#=#',$s);
	$s = str_replace(':','#:#',$s);
	$s = str_replace('+','#+#',$s);
	$s = str_replace('-','#-#',$s);
	$s = str_replace('*','#*#',$s);
	$s = str_replace('/','#/#',$s);
	$s = str_replace('(','#(#',$s);
	$s = str_replace(')','#)#',$s);
	$s = str_replace('.','#.#',$s);
	$s = str_replace('##','#',$s);
	print_r($s);
	echo "<br />第二步：词法分析<br />";
	$s2 = explode('#',$s);//拆分
	$key = array(//1:类型 2：保留字 3：运算符 4：分隔符 5：变量 6：变量值
		'integer'=>'1',
		'source'=>'2',
		'﻿PROGRAM'=>'2',
		'BEGIN'=>'2',
		'END'=>'2',
		'VAR'=>'2',
		':'=>'1',
		'DIV'=>'3',
		'﻿MOD'=>'3',
		'*'=>'3',
		'-'=>'3',
		'+'=>'3',
		'/'=>'3',
		'('=>'4',
		')'=>'4',
		';'=>'4',
		','=>'4',
		'.'=>'4',
		'='=>'4',
	);
	$n = count($s2);
	for($i=0;$i<$n-1;$i++){//词法分析，并进行赋值
		$value[$i] = 0;
		foreach($key as $k=>$v){
			if($s2[$i]==$k){
				$value[$i] = $v;
				break;
			}
		}
		if($value[$i] =='0'){
			if(preg_match("/[0-9]+/is",$s2[$i])){
				$value[$i] = 6;
			}else if(preg_match("/[A-Za-z]+/is",$s2[$i])){
				$value[$i] = 5;
			}
		}
	}
	echo "1:类型 2：保留字 3：运算符 4：分隔符 5：变量 6：变量值<br />";
	for($i=0;$i<$n-1;$i++){//输出
		echo "[".$value[$i].",\"".$s2[$i]."\"]<br />";
	}
?>